import 'package:casdon/common/utils/string_externtion.dart';
import 'package:casdon/modules/recipe/data/api/recipe_module_api.dart';
import 'package:casdon/modules/recipe/data/model/recipe_placeholder_data.dart';

// 几种类型对应菜谱中模块的几种类型。其中 style3活动类型，又有2种showStyle
enum RecipeModuleStyle {
  style1, // 一周菜谱
  style2, // 菜谱集，专题菜谱，总之都是菜谱的集合。
  style3, // 菜谱活动，
  styleNull, //烹饪课堂, 你有见过类型语意的字段返回null的吗，活久见
}

// 2种展示类型，目前好像是只在 RecipeModuleStyle = style3时生效。
// 模块展示样式和 style 以及showStyle都有关，但是又没有具体的关系，你说坑不坑吧。
enum RecipeModuleShowStyle {
  showStyle1,
  showStyle2,
  showStyleNull, //
}

extension RecipeModuleShowStyleX on RecipeModuleShowStyle {
  static RecipeModuleShowStyle fromInt(int? value) {
    switch (value) {
      case 1:
        return RecipeModuleShowStyle.showStyle1;
      case 2:
        return RecipeModuleShowStyle.showStyle2;
      case null:
        return RecipeModuleShowStyle.showStyleNull;
      default:
        return RecipeModuleShowStyle.showStyleNull;
    }
  }
}

extension RecipeModuleStyleX on RecipeModuleStyle {
  static RecipeModuleStyle fromInt(int? value) {
    switch (value) {
      case 1:
        return RecipeModuleStyle.style1;
      case 2:
        return RecipeModuleStyle.style2;
      case 3:
        return RecipeModuleStyle.style3;
      case null:
        return RecipeModuleStyle.styleNull;
      default:
        return RecipeModuleStyle.styleNull;
    }
  }
}

class RecipeModuleModel {
  final String title;
  final String _imgUrl;
  final RecipeModuleStyle style;
  final RecipeModuleShowStyle showStyle;
  final int sort;
  final String id;

  String get imgUrl => _imgUrl.cropParams700;

  RecipeModuleModel({
    required this.title,
    required String imgUrl,
    required this.style,
    required this.showStyle,
    required this.sort,
    required this.id,
  }) : _imgUrl = imgUrl;

  // 静态方法转换
  static RecipeModuleModel fromApi(ResponseRecipeModuleApi response) {
    return RecipeModuleModel(
      id: response.id,
      title: response.name,
      imgUrl: response.ossUrls ?? recipePlaceHolderImgUrl,
      style: RecipeModuleStyleX.fromInt(response.style),
      showStyle: RecipeModuleShowStyleX.fromInt(response.showStyle),
      sort: response.sort,
    );
  }

  // 批量转换的静态方法
  static List<RecipeModuleModel> listFromApi(
    List<ResponseRecipeModuleApi> items,
  ) {
    return items.map(fromApi).toList();
  }
}
